package gov.mogaha.ntis.cmm.mob.util;

import java.util.ArrayList;
import java.util.List;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.widget.TextView;


/**
 *  Class Name : GbnPickDialog.java
 *  Description : 구분을 선택할 수 있는 다이얼로그를 호출하는 클래스
 * 
 *   수정일			수정자		수정내용
 *   -----------	---------	---------------------------
 *   2011.08.17	김효진		최초 생성
 *   2011.10.18	이전봉		매개변수로 TextView를 지정했을 때, 이미 선택된 아이템이 있다면 표시해주는 생성자 추가
 *
 *  @author 김효진
 *  @since 2011. 08. 17
 *  @version 1.2
 *  @see TestB
 * 
 *  Copyright (C) 2009 by MOPAS All right reserved.
 */
public class GbnPickDialog extends AlertDialog.Builder {
	Context context;
	private final static String BUTTON_CANCEL_TITLE = "취소";
	protected final String[] ITEMS;
	
	
	/**<B><I>public LocationPickDialog(Context context, DialogInterface.OnClickListener itemClickEvent)</B></I>
	 * 구분를 선택할 수 있는 다이얼로그를 호출함. 매개변수로 다이얼로그의 아이템 선택 시의 액션을 리스너로 지정.
	 * @param String title 다이얼로그의 타이틀
	 * @param ArrayList<String> list 다이얼로그에 나올 아이템리스트
	 * @param context Context
	 * @param itemClickEvent 아이템 선택 시의 액션을 지정.
	 * @author 김효진
	 */
	public GbnPickDialog(String title, ArrayList<String> list, Context context, DialogInterface.OnClickListener itemClickEvent) {
		super(context);
		this.context = context;
		this.setTitle(title);
		this.setNegativeButton(BUTTON_CANCEL_TITLE, null);
		
		ITEMS = new String[list.size()];
		for(int i=0; i<list.size(); i++){
			ITEMS[i] = list.get(i);
		}
		this.setSingleChoiceItems(ITEMS, 0, itemClickEvent);
	}
	
	
	
	/**<B><I>public GbnPickDialog(String title, String[] list, {@link Context} context, 
	 * {@link DialogInterface.OnClickListener} itemClickEvent)</B></I><BR>
	 * 아이템을 선택할 수 있는 다이얼로그를 호출. 기존의 ArrayList 대신 문자열배열도 매개변수로 사용할 수 있게 했습니다.
	 * @param title 다이얼로그의 타이틀
	 * @param list 다이얼로그에 표시될 아이템리스트
	 * @param context 다이얼로그를 호출한 액티비티의 컨텍스트
	 * @param itemClickEvent 아이템 선택 시의 액션
	 * @author 이전봉
	 */
	public GbnPickDialog(String title, String[] list, Context context, DialogInterface.OnClickListener itemClickEvent) {
		super(context);
		this.context = context;
		this.setTitle(title);
		this.setNegativeButton(BUTTON_CANCEL_TITLE, null);
		
		ITEMS = null;
		this.setSingleChoiceItems(list, 0, itemClickEvent);
	}
	
	
	
	/**<B><I>public GbnPickDialog(String title, {@link List}&LT;String&GT; list, {@link Context} context, {@link TextView} textview, 
	 * {@link DialogInterface.OnClickListener} itemClickEvent)</B></I><BR>
	 * 아이템을 선택할 수 있는 다이얼로그를 호출한다.<P>
	 * 매개변수로 이 다이얼로그를 호출하는 트리거(예를들어, <B>{@link ButtonView}.getTextView()</B>)를 
	 * 지정해주면, 해당 트리거에서 이미 선택되어진 아이템이 있을 때 기존의 선택된 아이템을 다이얼로그에서 선택되어진 상태로 만든다. 
	 * 일치하는 아이템이 없다면(예를들어 다이얼로그가 처음 호출되어 선택되어진 아이템이 없다면) 가장 첫번째 아이템이 
	 * 다이얼로그에서 선택되어진 상태가 된다.<P>
	 * 기존의 문자열배열을 매개변수로 넣는 생성자와 내용상의 차이는 없지만 성능적인 면에서 비교적 열세이므로 
	 * 문자열 배열을 넣는 생성자를 사용하길 권장함.
	 * @param title 다이얼로그의 타이틀
	 * @param list 다이얼로그에 표시될 아이템리스트
	 * @param context 다이얼로그를 호출한 액티비티의 컨텍스트
	 * @param textview 이 다이얼로그를 호출하는 트리거(TextView)
	 * @param itemClickEvent 아이템 선택 시의 액션
	 * @author 이전봉
	 */
	public GbnPickDialog(String title, List<String> list, Context context, TextView textview, DialogInterface.OnClickListener itemClickEvent) {
		super(context);
		this.context = context;
		setTitle(title);
		setNegativeButton(BUTTON_CANCEL_TITLE, null);
		
		ITEMS = new String[list.size()];
		int index = 0;
		int selectedIndex = 0;
		String exItem = textview.getText().toString();
		
		for(String item : list){
			ITEMS[index] = item;
			if (exItem.equals(item)) selectedIndex = index;
			index++;
		}
		
		setSingleChoiceItems(ITEMS, selectedIndex, itemClickEvent);
	}
	
	
	
	/**<B><I>public GbnPickDialog(String title, String[] list, {@link Context} context, {@link TextView} textview, 
	 * {@link DialogInterface.OnClickListener} itemClickEvent)</B></I><BR>
	 * 아이템을 선택할 수 있는 다이얼로그를 호출한다.<P>
	 * 매개변수로 이 다이얼로그를 호출하는 트리거(예를들어, <B>{@link ButtonView}.getTextView()</B>)를 
	 * 지정해주면, 해당 트리거에서 이미 선택되어진 아이템이 있을 때 기존의 선택된 아이템을 다이얼로그에서 선택되어진 상태로 만든다. 
	 * 일치하는 아이템이 없다면(예를들어 다이얼로그가 처음 호출되어 선택되어진 아이템이 없다면) 가장 첫번째 아이템이 
	 * 다이얼로그에서 선택되어진 상태가 된다.
	 * @param title 다이얼로그의 타이틀
	 * @param list 다이얼로그에 표시될 아이템리스트
	 * @param context 다이얼로그를 호출한 액티비티의 컨텍스트
	 * @param textview 이 다이얼로그를 호출하는 트리거(TextView)
	 * @param itemClickEvent 아이템 선택 시의 액션
	 * @author 이전봉
	 */
	public GbnPickDialog(String title, String[] list, Context context, TextView textview, DialogInterface.OnClickListener itemClickEvent) {
		super(context);
		this.context = context;
		setTitle(title);
		setNegativeButton(BUTTON_CANCEL_TITLE, null);
		
		int index = 0;
		int selectedIndex = 0;
		String exItem = textview.getText().toString();
		
		ITEMS = null;
		for (String item : list) {
			if (exItem.equals(item)) {
				selectedIndex = index;
				break;
			}
			index++;
		}
		
		setSingleChoiceItems(list, selectedIndex, itemClickEvent);
	}
}











